記得小菜鳥說過他覺得php的Entity跟Java的java bean很像嗎?
各位看官們可能會滿頭黑人問號...心裡滿是疑問的想說你在說什麼?
簡單來說,Entity裡面放置的就是你的表單欄位,
可以利用get and set 對欄位進行取值或附值的動作,
也可以針對各個property來進行驗證 (後續會再介紹到validator的部分),
更可以使用ORM來進行欄位與資料庫的連接或是欄位之間的關聯,由於本次介紹沒有提到ORM,所以範例只會簡單的敘述
詳情可以參照symfony官方網站
https://symfony.com/doc/4.4/doctrine.html
首先,我們必須先安裝ORM這個bundle才能讓Entity裡的欄位與資料庫連接,在cmd執行下列指令
composer require symfony/orm-pack
指令下完以後,在src目錄下的Entity目錄,建置一個class,
建置完以後,對這個class按下快捷鍵alt+insert,會看見一個orm class , 大力地給它按下去 !!
這是要做什麼呢~ 就是告訴資料庫說,欸....我們在database有這個table哦,幫我連接上去!
before:
after:
看到了嗎,94這麼方便~94這麼快速,table後面的name 要跟你所連接的dataBase 的table name一樣,
不然會爆炸給各位看哦!
接著我們必須把所需要的欄位加上去
1.給予property,名稱,欄位型態,可否為空,長度...等等
/**
* @ORM\Entity
* @ORM\Table(name="test_entity")
*/
class TestEntity
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(name="id", type="integer")
*/
private $id;
/**
* @ORM\Column(name="name",type="string",length=20,nullable=true)
*/
private $name;
}
property加完後,我們必須提供get and set的方法,才能進行取值及附值,大力地按下快捷鍵alt+insert
看到Getter and Setters 按下去就會自動生成function囉!!
/**
* @ORM\Entity
* @ORM\Table(name="test_entity")
*/
class TestEntity
{
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(name="id", type="integer")
*/
private $id;
/**
* @ORM\Column(name="name",type="string",length=20,nullable=true)
*/
private $name;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id): void
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
}
這樣就完成了最基礎最基礎的entity了~接下來來介紹幾個symfony orm裡的幾個常用lifecycle,
通常這些會用在後續會提到的EevenListener(監聽器)或Entity上,寫法當然是用最黑科技的註解式寫法啦 : )
1.prePersist : 時間點會發生在每個Entity在進行持久化數據時
2.preUpdate : 時間點會在orm執行update前,也就是在更新實體類前
3.preFlush : 時間點會在進行變更的儲存前
4.onFlush : 時間點會在進行變更的儲存時
5.preRemove : 時間點會在orm執行delete前,也就是在刪除實體類前
範例一 : 使用在entity上 , 如果像以下這樣使用,我會在每次更新這個實體類前,附值給createdTime
範例二 : 使用在EventListener上,將註解放在function上,後面會介紹如何將監聽器掛在entity上使用,如果像以下 這樣使用,我會在每次這個entity在flush之前,列印1234
以上是關於實體類加上lifecycle的簡單介紹,
下一篇,嘿嘿嘿...我們要來當個偷窺狂,來監聽我們的Entity了>< , 威~ 不是啦..什麼偷窺狂,
我們只是想請Entity在特定時候幫我們做一些事情而已!!! 身為一個變態.. 阿 不是,
身為一個認真的小菜鳥工程師,我們除了要懂得使用以外,還要懂得製作,
所以下一篇~會介紹如何建立一個簡單的監聽器,然後如何套用在實體類上。
才第五篇而已....小菜鳥的精神狀態已經快分崩離析了,各種原形畢露~